#ifndef DATA_TEXTURE_H
#define DATA_TEXTURE_H

#include <string>
#include "Common/Algebra/Transform.h"

namespace data {

	class Texture {
	public:
		Texture(
			std::string fileName,
			cmn::Transform position,
			float width,
			float height ) :
			m_fileName( fileName ),
			m_position( position ),
			m_width( width ),
			m_height( height )
		{}

		Texture( const Texture& texture ) :
			m_fileName( texture.GetFileName() ),
			m_position( texture.GetPosition() ),
			m_width( texture.GetWidth() ),
			m_height( texture.GetHeight() )
		{}

		~Texture() {}

		inline std::string GetFileName() const { return m_fileName; }
		inline void SetFileName( std::string fileName ) { m_fileName = fileName; }

		inline cmn::Transform GetPosition() const { return m_position; }
		inline void SetPosition( const cmn::Transform& position ) { m_position = position; }

		inline float GetWidth() const { return m_width; }
		inline void SetWidth( float width ) { m_width = width; }

		inline float GetHeight() const { return m_height; }
		inline void SetHeight( float height ) { m_height = height; }

	private:
		std::string m_fileName;
		cmn::Transform m_position;
		float m_width;
		float m_height;
	};

	inline bool operator == ( const Texture& a, const Texture& b ) {
		return
			a.GetFileName() == b.GetFileName() &&
			a.GetPosition() == b.GetPosition() &&
			a.GetWidth() == b.GetWidth() &&
			a.GetHeight() == b.GetHeight();
	}

	inline bool operator != ( const Texture& a, const Texture& b ) {
		return !( a == b );
	}

}

#endif
